package com.sxran.im.handler;

import cn.hutool.core.util.StrUtil;
import com.sxran.im.dao.ImChatBodyMapper;
import com.sxran.im.dao.ImConversationMapper;
import com.sxran.im.info.ImChatBody;
import com.sxran.im.info.ImConversation;
import com.sxran.im.service.ConversationService;
import com.sxran.im.service.UserGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Slf4j
@Service
public class ChatBeforeCmdHandler extends AbstractCmdHandler<ImChatBody>{
    @Resource
    private ImChatBodyMapper imChatBodyMapper;
    @Resource
    private ConversationService conversationService;
    @Resource
    private UserGroupService userGroupService;

    @Override
    public Object doBeanService(ImChatBody json) {
        log.info("这里是发消息之前的内容,可以对他做内容的过滤。 \n 也可以把他记录到数据库中存储,但是不保证对方一定接受到,因为这是前置操作,也就是说中途可能服务器拒绝发送 \n 如果要做到百分之百准确，建议再收到消息之后再修改一下状态。 ={}",json);
        // 存聊天表。
        imChatBodyMapper.insert(json);

        // 存会话表内容。
        String conversationId = json.getConversation();
        Integer chatType = json.getChatType();
        String to = null;
        String string = json.getContent().toString();
        String fromId = json.getFromId();
        // 标题和图标的设置。
        if(chatType == 1){
            to = json.getGroupId();
            List<String> userIds = userGroupService.getUserIds(to);
            for (String userId : userIds) {
                if (!StrUtil.equals(fromId, userId)) {
                    // 给所有群成员，更新一下会话表。
                    conversationService.updateOrInsert(userId,conversationId, string, chatType,to,1);
                }
            }
            // 自己的会话表,不添加未读计数
            conversationService.updateOrInsert(fromId,conversationId, string, chatType,to,0);
        }else if (chatType == 2){
            to = json.getToId();
            conversationService.updateOrInsert(to,conversationId, string, chatType,fromId,1);
            // 自己的会话表,不添加未读计数
            conversationService.updateOrInsert(fromId,conversationId, string, chatType,to,0);
        }
        // 【BUG】接收方第一次收到消息，会话列表标题和头像就是空的
        ImConversation newConversationObj = new ImConversation();
        newConversationObj.setId(conversationId);
        conversationService.fillConversation(chatType,to,newConversationObj);
        json.setNewConversationObj(newConversationObj);
        return json;
    }
}
